GtkWidget *searchbar;
GListModel *icon_filter_model;
GListStore *icon_store;
+ GListModel *context_model;
GListStore *context_store;
GtkFilter *name_filter;
+ GtkFilter *search_mode_filter;
GtkWidget *details;
GtkWidget *image1;
GtkWidget *image2;
gtk_widget_add_controller (image, GTK_EVENT_CONTROLLER (source));
}
+static void
+search_mode_toggled (GtkSearchBar *searchbar,
+ GParamSpec *pspec,
+ IconBrowserWindow *win)
+{
+ if (gtk_search_bar_get_search_mode (searchbar))
+ gtk_single_selection_set_selected (GTK_SINGLE_SELECTION (win->context_model), GTK_INVALID_LIST_POSITION);
+ else if (gtk_single_selection_get_selected (GTK_SINGLE_SELECTION (win->context_model)) == GTK_INVALID_LIST_POSITION)
+ gtk_single_selection_set_selected (GTK_SINGLE_SELECTION (win->context_model), 0);
+
+ gtk_filter_changed (win->search_mode_filter, GTK_FILTER_CHANGE_DIFFERENT);
+}
+
+static void
+selected_name_changed (GtkSingleSelection *selection,
+ GParamSpec *pspec,
+ IconBrowserWindow *win)
+{
+ if (gtk_single_selection_get_selected (selection) != GTK_INVALID_LIST_POSITION)
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (win->searchbar), FALSE);
+}
+
static void
icon_browser_window_init (IconBrowserWindow *win)
{
win->name_filter = GTK_FILTER (gtk_custom_filter_new (filter_by_icon_name, NULL, NULL));
gtk_multi_filter_append (GTK_MULTI_FILTER (filter), g_object_ref (win->name_filter));
+
+ g_signal_connect (win->searchbar, "notify::search-mode-enabled", G_CALLBACK (search_mode_toggled), win);
+ g_signal_connect (win->context_model, "notify::selected", G_CALLBACK (selected_name_changed), win);
}
static void
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, searchbar);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, icon_store);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, icon_filter_model);
+ gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, context_model);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, context_store);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, details);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, image8);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, label8);
gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, description);
+ gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), IconBrowserWindow, search_mode_filter);
gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), item_activated);
gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (class), copy_to_clipboard);
</object>
</child>
<child>
- <object class="GtkStringFilter">
- <property name="ignore-case">0</property>
- <property name="match-mode">exact</property>
- <property name="expression">
- <lookup name="context" type="IbIcon"/>
- </property>
- <binding name="search">
- <lookup name="id" type="IbContext">
- <lookup name="selected-item" type="GtkSingleSelection">
- context_model
- </lookup>
- </lookup>
- </binding>
+ <object class="GtkAnyFilter">
+ <child>
+ <object class="GtkBoolFilter" id="search_mode_filter">
+ <property name="expression">
+ <lookup name="search-mode-enabled">
+ searchbar
+ </lookup>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStringFilter">
+ <property name="ignore-case">0</property>
+ <property name="match-mode">exact</property>
+ <property name="expression">
+ <lookup name="context" type="IbIcon"/>
+ </property>
+ <binding name="search">
+ <lookup name="id" type="IbContext">
+ <lookup name="selected-item" type="GtkSingleSelection">
+ context_model
+ </lookup>
+ </lookup>
+ </binding>
+ </object>
+ </child>
</object>
</child>
</object>